💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    04 모델(Model) 정의 및 마이그레이션 | ✅ 편저: 코담 운영자

    Django 웹 프로그래밍 강좌 4강 - 모델(Model) 정의 및 마이그레이션 (Django 5.2 기준)

    강의 영상:

    이 강의는 Django 공식 문서의 2.2 튜토리얼 내용을 바탕으로 진행되며, Django 5.2 버전에 맞춰 코드를 업그레이드하여 설명합니다.

    📚 공식문서 주소: https://docs.djangoproject.com/ko/5.2/intro/tutorial02/


    1. 데이터베이스 개요

    웹 애플리케이션은 보통 데이터를 저장해야 하며, 이를 위해 데이터베이스(DB)를 사용합니다.

    • Django는 기본적으로 SQLite를 내장 DB로 사용합니다.
    • PostgreSQL, MySQL, Oracle 등의 데이터베이스로 쉽게 교체할 수 있습니다.

    설정 파일에서 DB 엔진 변경하기

    settings.pyDATABASES 항목을 아래와 같이 설정합니다:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
    

    다른 DB를 사용할 경우, ENGINE 값만 바꾸고, 관련 Python 드라이버를 설치하면 됩니다. 예: psycopg2 for PostgreSQL


    2. 모델(Model) 정의

    Django에서 모델은 데이터베이스 테이블의 구조를 정의합니다.

    설문조사 기능을 위해 두 개의 모델을 정의합니다:

    • Question: 질문 정보 (질문 텍스트, 등록일자)
    • Choice: 선택지 정보 (선택 텍스트, 득표 수, 관련 질문)

    polls/models.py

    from django.db import models
    
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField("date published")
    
        def __str__(self):
            return self.question_text
    
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)
    
        def __str__(self):
            return self.choice_text
    
    • CharField: 문자열 저장 필드, max_length 필수
    • DateTimeField: 날짜/시간 정보 저장
    • ForeignKey: 다른 모델과 관계 설정 (1:N 관계)
    • on_delete=models.CASCADE: 참조된 객체 삭제 시 같이 삭제됨

    하나의 Question에는 여러 Choice가 연결되므로 1:N 관계입니다.


    3. 앱 등록 (INSTALLED_APPS)

    모델을 정의한 앱을 프로젝트 설정에 등록해야 Django가 인식합니다.

    mysite/settings.py

    INSTALLED_APPS = [
        ...
        'polls.apps.PollsConfig',
    ]
    

    'polls' 대신 'polls.apps.PollsConfig'로 명시하면 앱의 설정 클래스를 통해 세밀한 제어가 가능합니다.


    4. 마이그레이션(Migrations)

    마이그레이션은 모델 변경 사항을 DB에 반영하기 위한 작업입니다.

    1단계: 마이그레이션 파일 생성

    python manage.py makemigrations polls
    
    • 모델 변경 사항을 감지하여 polls/migrations/에 설계도 파일 생성

    2단계: 실제 DB 반영

    python manage.py migrate
    
    • 생성된 마이그레이션 파일을 기반으로 실제 테이블 생성

    마이그레이션은 앱 별로 여러 단계로 나뉘며 Django가 자동 관리합니다.


    5. Django 셸에서 모델 다루기

    셸 실행

    python manage.py shell
    

    모델 불러오기

    from polls.models import Question, Choice
    from django.utils import timezone
    

    새 객체 생성 및 저장

    q = Question(question_text="What's new?", pub_date=timezone.now())
    q.save()
    

    데이터 조회

    print(q.id)  # 자동 생성된 기본 키
    print(q.pub_date)
    print(str(q))  # __str__ 반환 값 확인
    

    Choice 추가

    q.choice_set.create(choice_text="Not much", votes=0)
    q.choice_set.create(choice_text="The sky", votes=0)
    
    • .choice_setrelated_name을 설정하지 않은 경우 기본으로 제공됨

    6. 커스텀 메서드 예시

    최근 생성 여부 판단 메서드

    from datetime import timedelta
    
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - timedelta(days=1)
    
    • admin, template, test 등 다양한 곳에서 활용 가능
    • 모델 클래스 내부에 정의하여 재사용성을 높입니다

    마무리 요약

    • Django 모델 = DB 테이블 정의
    • makemigrations → 마이그레이션 파일 생성
    • migrate → 실제 DB 반영
    • 셸을 통해 모델 객체 생성, 조회 가능
    • 관계형 설계(1:N), 커스텀 메서드로 로직 분리 가능

    다음 강의 예고

    5강에서는 Django의 강력한 기능 중 하나인 관리자(admin) 기능을 학습합니다. 이를 통해 데이터베이스를 웹 인터페이스에서 직접 관리할 수 있게 됩니다.

    감사합니다.

    TOP
    preload preload